package com {
	import flash.events.*;
	import mx.controls.Alert;
	import flash.net.*;
	import com.SHA1;
	
	public class User extends EventDispatcher {
		// l'instance
		private static var _instance:User;
		public var isLogged:Boolean = false;
		public var username:String = "";

		// Déclaration de deux constantes pour l'utilisation des noms d'événements
		public static const AUTHENTICATE_SUCCESS:String = "success";
		public static const AUTHENTICATE_FAIL:String = "fail";

		public function User(){}

		// Méthode d'accèsau singleton
		public static function getInstance():User{
			if(_instance == null){
				_instance = new User();
			}
			return _instance;
		}

		// cette méthode teste si le nom d'utilisateur et le mot de passe
		// sont valides. S'ils le sont, elle envoie un événement AUTHENTICATE_SUCCESS
		// Sinon, elle envoie un événement AUTHENTICATE_FAIL
		public function authenticate(username:String, password:String):void{
			var chargeur:URLLoader = new URLLoader ();
			var mes_vars : URLVariables = new URLVariables();
			mes_vars.userid = username;
			mes_vars.pass = SHA1.encrypt(password);
			
			this.username = username;
					
			var adresse:URLRequest = new URLRequest("./getData.php?a=connect");
			adresse.method = URLRequestMethod.POST;
			adresse.data = mes_vars;
	
			chargeur.addEventListener(Event.COMPLETE, endLoading);
			chargeur.load(adresse);
		}
		
		public function endLoading(e:Event):void {
			var contenu : XML = XML(e.target.data);
			if(contenu=="true") {
				dispatchEvent(new Event(AUTHENTICATE_SUCCESS));
				isLogged = true;
				Alert.show("Vous êtes maintenant connecté.", "Information");
			}else{
				username = "";
				dispatchEvent(new Event(AUTHENTICATE_FAIL));
				Alert.show("Erreur lors de la connection.", "Information");
			}
		}
		
		public function logout():void{
			_instance = null;
			isLogged = false;
			username = "";
		}
		
		public function subscribe(username:String, password:String):void {
			var chargeur:URLLoader = new URLLoader ();
			var mes_vars : URLVariables = new URLVariables();
			mes_vars.user = username;
			mes_vars.pass = SHA1.encrypt(password);
					
			var adresse:URLRequest = new URLRequest("./getData.php?a=subscribe");
			adresse.method = URLRequestMethod.POST;
			adresse.data = mes_vars;
	
			chargeur.addEventListener(Event.COMPLETE, endSubscribe);
			chargeur.load(adresse);
		}

		private function endSubscribe(e:Event):void {
			var contenu : XML = XML(e.target.data);
			if(contenu=="true") {
				Alert.show("Vous êtes maintenant enregistré.", "Information");
			}
			else {
				Alert.show("Erreur lors de l'inscription.", "Information");
			}
		}

	}
}